from Steering import SteeringManager, ISteerable

################################################################################
class Brain(ISteerable):
    """
    Virtual base Controller class for Entities
    """
    ############################################################################
    def __init__(self, oEntity):
        """
        param - oEntity : Client Entity object
        """
        self._nTimeElapsed = float(0.0)
        self._SteeringManager = SteeringManager()
        self._oEntity = oEntity
    ############################################################################
    
    ############################################################################
    def Update(self):
        """
        Virtual Function that should implement updates to Brain's decision 
            making
        """
        pass
    ############################################################################
################################################################################

################################################################################
class BrainManager():
    """
    Manages Brain instances
    """
    ############################################################################
    def __init__(self):
        self._dBrains = {}
        
        # Need to know when a new Entity is created
    ############################################################################
    
    ############################################################################
    def NewEntity(self, oEvent):
        """
        Creates a new Brain instance for the Entity
        """
        oEntity = oEvent.GetEventData('oEntity')
        self._dBrains[oEntity] = Brain(oEntity)
    ############################################################################
################################################################################